package com.yang.frost.blueberry.weixin.service;

import com.yang.frost.blueberry.weixin.exception.WxErrorException;

/**
 * @author 10296
 * @date 2021/1/29
 * @Description: 微信的入口类
 */
public interface WxService {

    /**
     * <pre>
     * 验证消息的确来自微信服务器.
     * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN
     * </pre>
     *
     * @param nonce     随机串
     * @param signature 签名
     * @param timestamp 时间戳
     * @return 是否验证通过
     */
    boolean checkSignature(String timestamp, String nonce, String signature);

    /**
     * 获取access_token, 不强制刷新access_token.
     *
     * @return token
     * @throws WxErrorException .
     * @see #getAccessToken(boolean)
     */
    String getAccessToken() throws WxErrorException;

    /**
     * <pre>
     * 获取access_token，本方法线程安全.
     * 且在多线程同时刷新时只刷新一次，避免超出2000次/日的调用次数上限
     *
     * 另：本service的所有方法都会在access_token过期时调用此方法
     *
     * 程序员在非必要情况下尽量不要主动调用此方法
     *
     * 详情请见: http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183&token=&lang=zh_CN
     * </pre>
     *
     * @param forceRefresh 是否强制刷新
     * @return token
     * @throws WxErrorException .
     */
    String getAccessToken(boolean forceRefresh) throws WxErrorException;


}
